import Vue from 'vue'
import App from './App.vue'
//全局实用路由
import router from './router' //需要和router里的命名一样,否则无效
//引入vuex
import store from './store'
//引入axios
import axios from 'axios'
Vue.prototype.$http=axios//将axios挂载在vue原型上,就可以在任意地方使用,不用一个一个的引入

Vue.config.productionTip = false
// 导航守卫
// 使用 router.beforeEach 注册一个全局前置守卫，判断用户是否登陆
router.beforeEach((to,from,next)=>{
  //无论是刷新还是跳转路由，第一个进入的就是这个路由前置钩子函数,可以让token在刷新的时候留在vux里
  store.dispatch('changeToken',localStorage.getItem('easytoken'))
  if(to.meta.requireAuth){
    if(store.state.token.token){//如果token存在
      next()//让它进入目标路由
    }else{
      next({//不存在就去登录页
        path:'/login',
        // query:{redirect:to.fullPath}
      })
    }
  }else{//不写会停
    next()
  }
})

//axios拦截器
// 添加请求拦截器，在请求头中加token
axios.interceptors.request.use(
  config => {
    if (localStorage.getItem('easytoken')) {
      config.headers.easytoken = localStorage.getItem('easytoken');
    }
 
    return config;
  },
  error => {
    return Promise.reject(error);
  });
  //每次请求有返回的,先经过这个拦截器
  axios.interceptors.response.use(
    response=>{
        if(response.status == 200){
            const data=response.data.data
            console.log(data)
            if(data.code == '-1'){
                //登录过去,需要重新登录.清空vuex和localstorage的token
                store.dispatch('changeToken','')
                localStorage.removeItem('easytoken')
                router.replace({path:'/login'})
            }
            return data
        }
        return response
    }
  )
new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app')
